package com.zte.claa.inficombo.csa.app.util;

import java.math.BigDecimal;
import java.util.UUID;

public class NumUtils {

	public static final int DEFAULT_SCALE = 2;
	/**
	 * double类型相加
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double add(double d1, double d2){
		BigDecimal big1 = new BigDecimal(Double.toString(d1));
		BigDecimal big2 = new BigDecimal(Double.toString(d2));
		
		return big1.add(big2).doubleValue();
	}
	
	/**
	 * double类型相减
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double subtract(double d1, double d2){
		BigDecimal big1 = new BigDecimal(Double.toString(d1));
		BigDecimal big2 = new BigDecimal(Double.toString(d2));
		
		return big1.subtract(big2).doubleValue();
	}
	
	/**
	 * 将KB转换成MB
	 * @param kb
	 * @return
	 */
	public static double kb2Mb(double kb, int scale){
		
		BigDecimal big = new BigDecimal(Double.toString(kb));
		BigDecimal unit = new BigDecimal(Double.toString(1024));
		
		return big.divide(unit, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 将KB转换成MB
	 * @param kb
	 * @return
	 */
	public static double kb2Mb(double kb){
		
		return kb2Mb(kb, DEFAULT_SCALE);
	}
	/**
	 * double类型相加
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double add(double d1, int d2){
		return add(d1, (double)d2);
	}
	
	/**
	 * 保留几位小数
	 * @param dvalue
	 * @param scale
	 * @return
	 */
	public static double setScale(double dvalue, int scale){
		BigDecimal bigDecimal = new BigDecimal(Double.toString(dvalue));
		return bigDecimal.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	//生成UUID
	public static String genUUID(){
		return UUID.randomUUID().toString().replaceAll("-", "");
	}
	
	//除法计算
	public static double divide(double a, int b){
		double value = 0.0;
		if (b == 0){
			value = (a == b?1:0);
		}
		else {
			value = a/b;
		}
		return setScale(value, DEFAULT_SCALE);
	}
	
	

	/**
	 * 将String转成double
	 * @param str
	 * @param defaultValue
	 * @return
	 */
	public static double parseDouble(String str, double defaultValue){
		try{
			return Double.parseDouble(str);
		} catch(Exception e){
			return defaultValue;
		}
	}
	
	/**
	 * 将String转成double
	 * @param str
	 * @param defaultValue
	 * @return
	 */
	public static float parseFloat(String str, float defaultValue){
		try{
			return Float.parseFloat(str);
		} catch(Exception e){
			return defaultValue;
		}
	}
	
	/**
	 * 将String转成int
	 * @param str
	 * @param defaultValue
	 * @return
	 */
	public static int parseInt(String str, int defaultValue){
		try{
			return Integer.parseInt(str);
		} catch(Exception e){
			return defaultValue;
		}
	}
	
	/**
	 * 将String转成byte
	 * @param str
	 * @param defaultValue
	 * @return
	 */
	public static byte parseByte(String str, byte defaultValue){
		try {
			return Byte.parseByte(str);
		} catch (Exception e) {
			return defaultValue;
		}
	}
	
}
